package search

import (
	"log"
	"sync"
)

// main->point->search->point
// a Map of registered matchers for searching
// searchingcontext
// searchContaoier
// matsrrcontext
// sarch-0mater
// ro
// sea便捷的问题
//分析问题 便捷问题 主次额问题 内高内聚 低耦合
// 内部一起 外部防腐
// DDD
// 21DDD DTO DDT
//
var matchers = make(map[string]Matcher)

//Run performs the search logic.
func Run(searchTerm string) {
	// Retrieve the list of feeds to search through
	feeds, err := RetrieveFeeds()
	if err != nil {
		log.Fatal(err)
	}
	//Create an unbuffered channel to receive match results to display
	results := make(chan *Result) //这里注意一个细节 如果返回的是一个 int 但是这个结果并不是原子的 我们是否是
	// struct res int 保存这样的结构还是多样化的结构 看你的取舍了
	// struct {} {}
	// res int 4 - int 4 一样的
	// struct {} nil *unpter nil
	// 断言进行 是否 []interface
	// value type is nil
	// 这样是可以的
	//  所以在 设计到  []interface{stud }
	// if v v==nil
	// 都不是nil
	// 需要进行断言
	//或者使用反射到 valueOf 是不是 nil
	//或者unsaf.pont(*ujper) == nil
	//一组资源的信息和组合都是可以使用sync.waitGorup进行处理的
	//可以继承 可以山小动物和小的可以是高内聚的可以说低耦合都可以 || ->一组 防腐内在合影远大于 lupi-lfserbir
	//iptab pvs
	// Setup a wait group so we can process all the feeds
	// wait.wait
	// wag.add
	// for waiy.wait
	// for wait.wait
	// for ch<-
	// wag.add
	// xian dengdai -yizu -wanc -zaiyizu
	// for
	// <-ch tuchu
	//yizu
	// ch
	// re
	// for <-ch
	// for go wg.done
	// se 5
	// 6
	// wait.
	//for chi
	// gweiwe
	// ch 5
	// set
	// for wait.w
	// set
	//a..
	//for go
	// set
	// <-ch
	// go
	// ch<- x奥法
	// 业务处理
	// 等待
	// set
	// add.ad
	//即可
	//
	// ch 6
	// <-
	// go w
	// wg.wait
	// ster
	// Setup a wait group so we can process all the feeds
	var waitGroup sync.WaitGroup
	// set the number or goruines we need to wait for while
	// they process the individual feeds.
	waitGroup.Add(feeds)

	//Lanuch a goroutine for each feed to find the results.
	//for _, feed := range feeds {
	//	//Retrieve a matcher for the search.
	//	//matcher,exists := matchers[feed.type]
	//	//if
	//}

	//set
}
